package com.right.near.business.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.right.near.business.entity.User;
import com.right.near.business.model.ao.*;
import com.right.near.business.model.vo.UserAddVO;
import com.right.near.business.model.vo.UserInfoVO;
import com.right.near.business.model.vo.UserVO;

import javax.servlet.ServletOutputStream;
import java.util.List;

/**
 * 用户服务
 *
 * @author star
 * @since 2022-07-20
 */
public interface IUserService extends IService<User> {

    /**
     * 用户分页查询
     *
     * @param ao 请求参数
     * @return Page<UserVO> 响应参数
     */
    Page<UserVO> queryUserPage(UserPageAO ao);

    /**
     * 用户明细查询
     *
     * @param ao 请求参数
     * @return UserInfoVO 响应参数
     */
    UserInfoVO queryUserDetail(UserInfoAO ao);

    /**
     * 用户新增数据
     *
     * @param ao 请求参数
     * @return UserAddVO 响应参数
     */
    UserAddVO addUser(UserAddAO ao);

    /**
     * 用户修改数据
     *
     * @param ao 数据
     */
    void updateUser(UserUpdateAO ao);

    /**
     * 用户删除数据
     *
     * @param ao 请求参数
     */
    void deleteUser(UserDeleteAO ao);

    /**
     * 用户批量删除数据
     *
     * @param aos 请求参数
     */
    void deleteBatchUser(List<UserDeleteAO> aos);

    /**
     * 用户导出数据
     *
     * @param ao     请求参数
     * @param stream 输出流
     */
    void exportUser(UserPageAO ao, ServletOutputStream stream);

    /**
     * 根据用户名称查询用户信息
     *
     * @param userName 用户名称
     * @return User
     */
    User queryUserByUserName(String userName);

}